From: kaf24@firebug.cl.cam.ac.uk Date: Wed, 25 Jan 2006 10:44:39 +0000 (+0100) Subject: Rev8517 (Reduce locked critical region in __enter_scheduler()), enable X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~16531^2~4 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=ade3f4d2e3853e4d92555e0bc34280ba27e1c8ee;p=xen.git Rev8517 (Reduce locked critical region in __enter_scheduler()), enable interrupt now before context switch. Then arch specific context_switch stub needs to disable interrupt itself. To solve some intermittent corruption. Signed-off-by: Kevin Tian --- diff --git a/xen/arch/ia64/xen/xenmisc.c b/xen/arch/ia64/xen/xenmisc.c index f2d5b708f4..5432ac6bc9 100644 --- a/xen/arch/ia64/xen/xenmisc.c +++ b/xen/arch/ia64/xen/xenmisc.c @@ -290,13 +290,9 @@ unsigned long context_switch_count = 0; void context_switch(struct vcpu *prev, struct vcpu *next) { -//printk("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); -//printk("@@@@@@ context switch from domain %d (%x) to domain %d (%x)\n", -//prev->domain->domain_id,(long)prev&0xffffff,next->domain->domain_id,(long)next&0xffffff); -//if (prev->domain->domain_id == 1 && next->domain->domain_id == 0) cs10foo(); -//if (prev->domain->domain_id == 0 && next->domain->domain_id == 1) cs01foo(); -//printk("@@sw%d/%x %d->%d\n",smp_processor_id(), hard_smp_processor_id (), -// prev->domain->domain_id,next->domain->domain_id); + uint64_t spsr; + + local_irq_save(spsr); if(VMX_DOMAIN(prev)){ vtm_domain_out(prev); } @@ -331,6 +327,7 @@ if (!i--) { printk("+",id); i = 1000000; } if (vcpu_timer_expired(current)) vcpu_pend_timer(current); } + local_irq_restore(spsr); context_saved(prev); }